package org.jsbd.boss.service;

import java.util.List;
import java.util.Map;

import org.jsbd.boss.common.DataGridModel;
import org.jsbd.boss.domian.channel.ChannelScriptItem;
import org.jsbd.boss.domian.channel.ChannelScriptRepo;
import org.jsbd.boss.domian.channel.ChannelScriptRepoMark;
import org.springframework.web.multipart.MultipartFile;

public interface IScriptService {

	/**
	 * 脚本库数据
	 * 
	 * @param page 分页信息
	 * @param channelScriptRepo 查询信息
	 * @return 脚本库数据
	 */
	Map<String, Object> getScriptRepoListJson(DataGridModel page, ChannelScriptRepo channelScriptRepo);

	/**
	 * 新增脚本库
	 * 
	 * @param channelScriptRepo 脚本库实体
	 */
	void saveChannelScriptRepo(ChannelScriptRepo channelScriptRepo);

	/**
	 * 根据名称获取脚本库
	 * 
	 * @param name 脚本库名称
	 * @return
	 */
	ChannelScriptRepo getScriptRepoByName(String name);

	/**
	 * 根据名称获取脚本库
	 * 
	 * @param id
	 * @return
	 */
	ChannelScriptRepo getScriptRepoById(Long id);

	/**
	 * 编辑脚本库
	 * 
	 * @param channelScriptRepo 脚本库实体
	 */
	void editChannelScriptRepo(ChannelScriptRepo channelScriptRepo);

	/**
	 * 获取脚本库关联的包
	 * 
	 * @param id 脚本库Id
	 * @return 返回脚本库关联的包
	 */
	List<ChannelScriptRepoMark> getMarksByRepoId(Long id);
	
	/**
	 * 删除脚本库关联的包
	 * 
	 * @param repoId 脚本库ID
	 */
	void deleteMarksByRepoId(Long repoId);

	/**
	 * 新增脚本库关联的包
	 * 
	 * @param list 需要新增的数据
	 */
	void addMark(List<ChannelScriptRepoMark> list);

	/**
	 * 获取脚本数据
	 * 
	 * @param page 分页信息
	 * @param channelScript 查询信息
	 * @return
	 */
	Map<String, Object> getScriptListJson(DataGridModel page, ChannelScriptItem channelScriptItem);

	/**
	 * 获取脚本库列表
	 * 
	 * @param isEnable
	 * @return
	 */
	List<ChannelScriptRepo> getScriptRepoByEnable(Integer isEnable);

	/**
	 * 保存脚本
	 * 
	 * @param channelScriptItem 脚本实体
	 * @param file 脚本文件
	 */
	void saveChannelScriptItem(ChannelScriptItem channelScriptItem, MultipartFile file);

	/**
	 * 废弃脚本
	 * 
	 * @param name
	 */
	void abandonScript(String name);
	
	/**
	 * 根据mark随机获取脚本
	 * 
	 * @param mark 包
	 * @param type 任务类型
	 * @return 脚本路径
	 */
	String randomScript(String mark, Integer type);

	
	/**
	 * 根据脚本名称获取脚本信息
	 * @param name 脚本名称
	 * @return
	 */
	ChannelScriptItem getScriptItemByName(String name);

	/**
	 * 根据mark获取脚本库信息
	 * 
	 * @param mark 包
	 * @return 对应mark获取的脚本库信息
	 */
	ChannelScriptRepoMark getScriptRepo(String mark);
	
	/**
	 * 根据脚本库Id、任务类型获取脚本
	 * 
	 * @param repoId 脚本库id
	 * @param type 任务类型
	 * @return 脚本
	 */
	List<String> getFilePathByRepoIdAndType(Long repoId, int type);

	/**
	 * 获取所有Marks
	 * 
	 * @return 所有Marks
	 */
	List<ChannelScriptRepoMark> getAllMarks();

	/**
	 * 删除关联包
	 * 
	 * @param mark mark
	 */
	void deleteByMark(String mark);
	
	/**
	 * 根据脚本库ID获取脚本
	 * 
	 * @param repoId
	 * 
	 */
	List<ChannelScriptItem> getChannelScriptItemByRepoid(Long repoId);

	/**
	 * 保存脚本执行量
	 * 
	 * @param channelScriptItem
	 */
	void saveConfigScriptNum(ChannelScriptItem channelScriptItem);
	
	/**
	 * 根据脚本库ID获取配置了量的脚本
	 * 
	 * @param repoId 脚本库ID
	 * @return
	 */
	List<String> getFilePathByRepoId(Long repoId);
}
